<!-- 
变量根据作用域的不同分为两种：全局变量和局部变量
     1.函数内部可以使用全局变量
     2.函数外部不可以使用局部变量
     3.当函数执行完毕，本作用域内的局部变量会销毁

闭包:指有权访问另一个函数作用域中的变量的函数
简单理解就是：一个作用域可以访问另外一个桉树内部的局部变量

 -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //利用闭包实现fn外面作用域可以访问fn内部的局部变量
        //闭包的主要作用：延伸了变量的作用范围
        function fn() {
            var num = 10;
            //第一种写法
            // function fun() {       
            //     console.log(num);
            // }
            // return fun();

            // 第二种写法
            return function () { //匿名函数
                console.log(num);
            }

        }
        var f = fn();
        f();  //这个f()可以访问fn()内部的局部变量

        //类似于(第一种写法类似于)
        // var f = function fun() {
        //     console.log(num);
        // }


        //(第二种写法类似于)
        // var f = function () {
        //     console.log(num);
        // }





    </script>
</body>

</html>
<!-- 
    闭包：
    1.闭包指有权访问另一个函数作用域中变量的函数
    2.一个作用域可以访问另一个函数的局部变量
    3.我们fn外面的作用域可以访问fn内部的局部变量
    4.闭包的主要作用：延伸了变量的作用范围(变量等函数都用完了才会销毁)
 -->